package com.time.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.time.domain.Comment;
import com.time.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 陈彦
 * @Description 评论信息 controller
 * @since 2020-10-21
 */

@Controller
@RequestMapping("/comment")
public class CommentController {
    @Autowired
    private CommentService commentService;

    /**
     * @param model 封装分页留言数据和总页数
     * @param page  当前页和每页显示数量
     * @return 请求转发至前台留言页面
     * @Description 分页查询留言数据给前台
     */
    @RequestMapping("/info")
    public String info(Model model, Page<Comment> page) {
        // 由于页面无法选择每页显示数据，所以默认每页显示4条留言数据
        page.setSize(4);
        Page<Comment> commentPage = commentService.page(page);

        model.addAttribute("commentPage", commentPage);
        model.addAttribute("totalPage", commentPage.getPages());
        return "guestbook";
    }

    /**
     * @param comment 留言对象
     * @return 重定向发至前台留言页面
     * @Description 添加前台留言
     */
    @PostMapping("/add")
    public String add(Comment comment) {
        commentService.save(comment);

        return "redirect:/comment/info";
    }

    /**
     * @param model 封装分页留言数据和总页数
     * @param page  当前页和每页显示数量
     * @return 请求转发至后台留言列表页面
     * @Description 分页查询留言数据给管理后台
     */
    @RequestMapping("/list")
    public String list(Model model, Page<Comment> page) {
        // 由于页面无法选择每页显示数据，所以默认每页显示4条留言数据
        page.setSize(4);
        Page<Comment> commentPage = commentService.page(page);

        model.addAttribute("commentPage", commentPage);
        model.addAttribute("totalPage", commentPage.getPages());
        return "manage/guestbook";
    }

    /**
     * @param id 用户ID
     * @return 根据删除结果，请求转发至相应页面
     * @Description 根据留言ID删除留言数据
     */
    @RequestMapping("/delete")
    public String delete(Integer id) {
        boolean removeComment = commentService.removeById(id);

        // 根据删除结果，请求转发至相应页面
        return JumpPage.backJumpPage(removeComment);
    }

    /**
     * @param model 封装回显的留言数据
     * @param id    留言ID
     * @return 请求转发至留言回复页面
     * @Description 根据留言ID进入留言回复页面，并回显留言数据
     */
    @RequestMapping("/update_input")
    public String input(Model model, String id) {
        Comment comment = commentService.getById(id);

        model.addAttribute("comment", comment);
        return "manage/guestbook-modify";
    }

    /**
     * @param comment 留言回复对象
     * @return 根据更新结果，请求转发至相应页面
     * @Description 根据留言ID回复留言
     */
    @RequestMapping("/update")
    public String update(Comment comment) {
        boolean updateComment = commentService.updateById(comment);

        // 根据更新结果，请求转发至相应页面
        return JumpPage.backJumpPage(updateComment);
    }
}
